package Com.webserver.contrller;

import Com.webserver.http.HttpRequest;
import Com.webserver.http.HttpResponse;
import Com.webserver.vo.User;

import java.io.*;

/**
 * 用来处理和用户相关的业务操作
 */
public class UserController {
    //保存使用用户信息的名字
    private static String userDirName="./users/";
    //程序加载时判断
    static {
        File userDir=new File(userDirName);
        if (!userDir.exists()){
            userDir.mkdir();

        }
    }
    public void login(HttpResponse response,HttpRequest request){
        System.out.println("开始处理登录...");
        String username=request.getParameter("username");
        String password=request.getParameter("passname");

        if (username==null ||password==null){
            response.setEntity(new File("./webapps/myweb/login.error.html"));
            return;
        }
        File userFile=new File(userDirName+username+"obj");
        if (userFile.exists()){
            try {
                ObjectInputStream ois=new ObjectInputStream(new FileInputStream(userFile));
                User user=(User)ois.readObject();
                if (user.getPassname().equals(password)){
                    response.setEntity(new File("./webapps/myweb/reg_error.html"));
                }

            } catch (IOException | ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
        System.out.println("登录处理成功！");
    }




    /**
     * 用来处理用户注册操作
     * @param request
     * @param response
     */
    public void reg(HttpRequest request, HttpResponse response){

        System.out.println("开始处理用户注册...");

        //1.从request中获取用户表单上提交的注册信息
        //注：request.getParameter()获取表单某输入框上的内容要传递的参数为该输出框name=""属性指定的值
        String username=request.getParameter("username");
        String password=request.getParameter("passname");
        String nickname=request.getParameter("nickname");
        String ageStr=request.getParameter("age");
        System.out.println(username+","+password+","+nickname+","+ageStr);
        /*
        必要的验证工作，保证注册的四个信息不为空，否则直接响应注册失败的提示页面
        年龄还要求必须是一个数字格式
        失败的页面：reg_error.html 居中显示一行字：注册失败，输入信息有误，请重新注册
        */
        if (username==null || password==null || nickname==null || ageStr==null || !ageStr.matches("[0-9]+")) {
            response.setEntity(new File("./webapps/myweb/reg_error.html"));
            return;
        }
        /*
          判断是否为重复用户，如果是重复用户则直接响应页面：reg_have_user.html
          该页面居中显示一行字：该用户已存在，请重新注册
         */
        File userFile=new File(userDirName+username+".obj");
        if (userFile.exists()){//说明该文件已存在已注册
            response.setEntity(new File("./webapps/myweb/reg_have-user.html"));
            return;
        }
//        if (!new File(userDirName+username+"obj").exists()){
//            response.setEntity(new File("./webapps/myweb/reg_have_user.html"));
//            return;
//        }


        int age=Integer.parseInt(ageStr);

        //2.将该用户信息写入磁盘保存
        User user=new User(username,password,nickname,age);

        try {
            ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(userDirName+username+".obj"));

            oos.writeObject(user);
            //注册成功

            //注册失败

            response.setEntity(new File("./webapps/myweb/reg_success.html"));
        } catch (IOException e) {
            e.printStackTrace();
        }





        //3.设置response响应注册结果页面

        System.out.println("用户注册处理完毕！");
    }
}
